#if !defined(CAMERA_H)
#define CAMERA_H
#include <iostream>
#include <eigen3/Eigen/Core>
#include <opencv4/opencv2/opencv.hpp>
using namespace std;

class Camera
{
private:
    double f_;
    double a_;
    double b_;
    double u0;
    double v0;
    Eigen::Matrix3d Intrinsic;
    double undistortParams[2];

public:
    Camera(double f_, double a_, double b_, double u0, double v0) : f_(f_), a_(a_), b_(b_), u0(u0), v0(v0)
    {
        R_.setUnit();
        t_.setZero();
        Intrinsic << a_ * f_, 0, u0, 0, b_ * f_, v0, 0, 0, 1;
    };
    Eigen::Matrix3d R_;
    Eigen::Vector3d t_;
    Eigen::Vector2d Projection(Eigen::Vector3d Pw);

    Eigen::Vector3d Projection(Eigen::Vector2d Pc);

    ~Camera();
};

Camera::~Camera()
{
}

#endif // CAMERA_H
